package main

import (
	"fmt"
	"gOrmTest/InitGorm"
	"gOrmTest/Models"
)

/**
* 查询
 */

func main() {
	// 方式一：map来接受
	//var result = make(map[string]interface{})
	// 方式二： 结构体接收
	//var result []Models.User

	//  1.first 排序后的第一条
	//InitGorm.Db.Model(&Models.User{}).First(&result)

	// 不需要指定哪个表 ，因为 这个结构体已经确定了是哪个表 ，不像上面map 来接收需要指定模型
	//InitGorm.Db.First(&result)
	//fmt.Println(result)

	//	2.take  不排序第一条
	// 同上

	//	3.last 排序最后一条
	// 同上

	/*
		4.条件
			4.1 主键
			4.2 string  where
			4.3 struct & map
				加入一个有内容的结构体作为条件
				也可以使用一个key为数据库字段的map作为条件
			4.4 内联条件
				直接在 Find, first等查询结果后面增加条件
	*/

	// 4.1  主键检索
	//dbres := InitGorm.Db.First(&result, 1)
	//fmt.Println(result)
	//fmt.Println(errors.Is(dbres.Error, gorm.ErrRecordNotFound))

	// 4.2 string 条件查询
	//InitGorm.Db.Where("name = ? and age = ?", "c++", 120).Find(&result)
	//InitGorm.Db.Where("name = ? and age = ?", "c++", 121).Or("name = ?", "python").Find(&result)

	// 4.3.1 struct
	//InitGorm.Db.Where(Models.User{Name: "c++",Age: 120}).Find(&result)

	// 4.3.2 map
	//InitGorm.Db.Where(map[string]interface{}{
	//	"name": "c++",
	//	"age":  120,
	//}).Find(&result)

	// 4.4 刚刚在 where 写的内容都以写在 Find 的第二个参数
	//InitGorm.Db.Find(&result, "name = ? and age >= 21", "c++")
	//InitGorm.Db.Omit("name").Find(&result, "name like ? ", "%c%")

	type UserInfo struct {
		Name string
		Age  int
	}

	var userinfoobj []UserInfo
	InitGorm.Db.Model(&Models.User{}).Find(&userinfoobj, `name = "c++"`)

	fmt.Println(userinfoobj)

	//	5.select字段
	//	6.join(关联)

}
